unit uAgenda;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Formulario_Padrao_Consulta, Grids, DBGrids, ComCtrls,
  TFlatButtonUnit, StdCtrls, Buttons, ExtCtrls, FMTBcd, DB, DBClient,
  Provider, SqlExpr, DBTables;

type
  TfrmAgenda = class(TFrmConsulta)
    TabControl1: TTabControl;
    DBGrid1: TDBGrid;
    EdtTipo_Ent: TRadioGroup;
    Edtativo: TRadioGroup;
    EdtInc_Bloq: TRadioGroup;
    dbgrdEntidade: TDBGrid;
    dspEntidade: TDataSetProvider;
    CDSEntidade: TClientDataSet;
    dtsEntidade: TDataSource;
    CDSENDERECO: TClientDataSet;
    dtsEndereco: TDataSource;
    Panel3: TPanel;
    edtLoc: TEdit;
    qryEntidade: TQuery;
    CDSENDERECOTipoEndereco: TStringField;
    CDSENDERECOFone: TStringField;
    CDSENDERECOFax: TStringField;
    CDSENDERECOCidade: TStringField;
    CDSENDERECOEndereco: TStringField;
    CDSENDERECOUF: TStringField;
    CDSENDERECOBairro: TStringField;
    CDSENDERECOCEP: TStringField;
    qryEntidadeENT_CODIGO: TStringField;
    qryEntidadeGRUPO_CODIGO: TStringField;
    qryEntidadeSUP_CODIGO: TStringField;
    qryEntidadeENT_CNPJ: TStringField;
    qryEntidadeREGIAO_CODIGO: TStringField;
    qryEntidadeREP_CODIGO: TStringField;
    qryEntidadeLINHA_CODIGO: TStringField;
    qryEntidadeLOCAL_CODIGO: TStringField;
    qryEntidadeSUBL_CODIGO: TStringField;
    qryEntidadeRAMO_CODIGO: TStringField;
    qryEntidadeENT_NOME: TStringField;
    qryEntidadeENT_FANTASIA: TStringField;
    qryEntidadeENT_INSCEST: TStringField;
    qryEntidadeENT_STATUS: TStringField;
    qryEntidadeENT_DATACAD: TDateTimeField;
    qryEntidadeENT_DATAINA: TDateTimeField;
    qryEntidadeENT_LIMITE: TFloatField;
    qryEntidadeENT_EMAIL: TStringField;
    qryEntidadeENT_OBSERVACAO: TBlobField;
    qryEntidadeENT_HOMEPAGE: TStringField;
    qryEntidadeENT_BLOQUEADO: TStringField;
    qryEntidadeENT_CONTABIL: TStringField;
    qryEntidadeENT_CPF: TStringField;
    qryEntidadeENT_TIPO: TFloatField;
    qryEntidadeENT_TIPOENT: TFloatField;
    qryEntidadeENT_HOMOLOGADO: TStringField;
    qryEntidadeENT_RG: TStringField;
    qryEntidadeENT_NASC: TDateTimeField;
    qryEntidadeENT_CONTABIL2: TStringField;
    qryEntidadeTAB_CODIGO: TStringField;
    CDSEntidadeENT_CODIGO: TStringField;
    CDSEntidadeGRUPO_CODIGO: TStringField;
    CDSEntidadeSUP_CODIGO: TStringField;
    CDSEntidadeENT_CNPJ: TStringField;
    CDSEntidadeREGIAO_CODIGO: TStringField;
    CDSEntidadeREP_CODIGO: TStringField;
    CDSEntidadeLINHA_CODIGO: TStringField;
    CDSEntidadeLOCAL_CODIGO: TStringField;
    CDSEntidadeSUBL_CODIGO: TStringField;
    CDSEntidadeRAMO_CODIGO: TStringField;
    CDSEntidadeENT_NOME: TStringField;
    CDSEntidadeENT_FANTASIA: TStringField;
    CDSEntidadeENT_INSCEST: TStringField;
    CDSEntidadeENT_STATUS: TStringField;
    CDSEntidadeENT_DATACAD: TDateTimeField;
    CDSEntidadeENT_DATAINA: TDateTimeField;
    CDSEntidadeENT_LIMITE: TFloatField;
    CDSEntidadeENT_EMAIL: TStringField;
    CDSEntidadeENT_OBSERVACAO: TBlobField;
    CDSEntidadeENT_HOMEPAGE: TStringField;
    CDSEntidadeENT_BLOQUEADO: TStringField;
    CDSEntidadeENT_CONTABIL: TStringField;
    CDSEntidadeENT_CPF: TStringField;
    CDSEntidadeENT_TIPO: TFloatField;
    CDSEntidadeENT_TIPOENT: TFloatField;
    CDSEntidadeENT_HOMOLOGADO: TStringField;
    CDSEntidadeENT_RG: TStringField;
    CDSEntidadeENT_NASC: TDateTimeField;
    CDSEntidadeENT_CONTABIL2: TStringField;
    CDSEntidadeTAB_CODIGO: TStringField;
    CDSENDERECODDD: TStringField;
    DBGrid2: TDBGrid;
    CDSCONTATO: TClientDataSet;
    DSContato: TDataSource;
    CDSCONTATOCONT_NOME: TStringField;
    CDSCONTATOCONT_DEPARTAMENTO: TStringField;
    CDSCONTATOCONT_RAMAL: TStringField;
    CDSCONTATOCONT_EMAIL: TStringField;
    CDSCONTATOCONT_CARGO: TStringField;
    CDSCONTATOCONT_NASC: TStringField;
    CDSCONTATOCONT_FONE: TStringField;
    procedure FormActivate(Sender: TObject);
    procedure dbgrdEntidadeTitleClick(Column: TColumn);
    procedure EdtTipo_EntClick(Sender: TObject);
    procedure TabControl1Change(Sender: TObject);
    procedure dbgrdEntidadeDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure EdtativoClick(Sender: TObject);
    procedure EdtInc_BloqClick(Sender: TObject);
    procedure dbgrdEntidadeCellClick(Column: TColumn);
    procedure edtLocChange(Sender: TObject);
    procedure dbgrdEntidadeKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
    procedure FazConsulta;
    procedure TrazEndereco;
    procedure TrazContato;
  public
    { Public declarations }
  end;

var
  frmAgenda: TfrmAgenda;

implementation

uses Dm;

{$R *.dfm}

procedure TfrmAgenda.FazConsulta;
var
  p_tipoent,
    p_ativo: Integer;
  p_incbloq: string;

begin
  p_tipoent := EdtTipo_Ent.ItemIndex;
  p_ativo := EdtAtivo.ItemIndex;
  if EdtInc_Bloq.ItemIndex = 0 then
    p_incbloq := 'S'
  else
    p_incbloq := 'N';

  CDSEntidade.Close;
  qryEntidade.Close;
  qryEntidade.SQL.Clear;
  qryEntidade.SQL.Add('Select * from Entidade where Ent_TipoEnt=' + char(39) + IntToStr(p_tipoent) + char(39));
  if p_ativo = 0 then
    qryEntidade.SQL.Add('and (Ent_Dataina=:p_data) ')
  else if p_ativo = 1 then
    qryEntidade.SQL.Add('and (Ent_Dataina<>:p_data) ');
  if p_incbloq = 'N' then
    qryEntidade.SQL.Add('and Ent_Bloqueado=' + char(39) + p_incbloq + char(39) + ' ');
  qryEntidade.SQL.Add('Order By ent_nome');
  if (p_ativo = 0) or (p_ativo = 1) then
    qryEntidade.ParamByName('p_data').asdatetime := 0;
  CDSEntidade.Open;
  TabControl1Change(nil);
  TrazEndereco;
  TrazContato;
end;

procedure TfrmAgenda.FormActivate(Sender: TObject);
begin
  inherited;
  FazConsulta;
end;

procedure TfrmAgenda.dbgrdEntidadeTitleClick(Column: TColumn);
begin
  inherited;
  CDSEntidade.IndexFieldNames := Column.FieldName;
end;

procedure TfrmAgenda.EdtTipo_EntClick(Sender: TObject);
begin
  inherited;
  dbgrdEntidade.Fields[1].Visible := True;
  dbgrdEntidade.Fields[2].Visible := True;
  case EdtTipo_Ent.ItemIndex of
    0: dbgrdEntidade.Fields[1].Visible := False;
    1: dbgrdEntidade.Fields[2].Visible := False;
  end;
  FazConsulta;
end;

procedure TfrmAgenda.TabControl1Change(Sender: TObject);
begin
  inherited;
  CDSEntidade.Filtered := False;
  CDSEntidade.Filter := 'ENT_NOME = ' + QuotedStr(TabControl1.Tabs[TabControl1.tabIndex] + '*');
  CDSEntidade.Filtered := True;
  TrazEndereco;
  TrazContato;
end;

procedure TfrmAgenda.dbgrdEntidadeDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  inherited;
  if not odd(CDSENTIDADE.RecNo) then
    if not (gdSelected in State) then begin
      dbgrdEntidade.Canvas.Brush.Color := $00FFEFDF;
      dbgrdEntidade.Canvas.FillRect(Rect);
      dbgrdEntidade.DefaultDrawDataCell(Rect, Column.Field, State);
    end;
end;

procedure TfrmAgenda.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  CDSEntidade.Close;
  CDSEndereco.Close;
end;

procedure TfrmAgenda.EdtativoClick(Sender: TObject);
begin
  inherited;
  FazConsulta;
end;

procedure TfrmAgenda.EdtInc_BloqClick(Sender: TObject);
begin
  inherited;
  FazConsulta;
end;

procedure TfrmAgenda.dbgrdEntidadeCellClick(Column: TColumn);
begin
  inherited;
  TrazEndereco;
  TrazContato;
end;

procedure TfrmAgenda.TrazEndereco;
var
  tq: TQuery;
begin
  inherited;
  CDSENDERECO.Close;
  CDSENDERECO.CreateDataSet;
  CDSENDERECO.Open;
  tq := TQuery.Create(self);
  tq.DatabaseName := dmInt.Db.DatabaseName;
  tq.SQL.clear;
  tq.params.Clear;
  tq.SQL.add('select distinct e.*, cid_ddd, cid_nome, tipend_descricao, EST_SIGLA from Endereco E, Cidade C, TipoEndereco T ' +
    'where e.Cid_Codigo = c.Cid_Codigo and e.Tipend_codigo = t.tipend_codigo ' +
    'and ent_codigo =:ent');
  tq.ParamByName('ent').AsString := CDSEntidadeENT_CODIGO.AsString;
  tq.Open;
  while not tq.Eof do begin
    CDSENDERECO.Append;
    CDSENDERECOTipoEndereco.AsString := tq.FieldByName('TIPEND_DESCRICAO').AsString;
    CDSENDERECOFone.AsString := tq.FieldByName('END_FONE').AsString;
    CDSENDERECOFax.AsString := tq.FieldByName('END_FAX').AsString;
    CDSENDERECOCidade.AsString := tq.FieldByName('CID_NOME').AsString;
    CDSENDERECOEndereco.AsString := tq.FieldByName('END_ENDERECO').AsString;
    CDSENDERECOUF.AsString := tq.FieldByName('EST_SIGLA').AsString;
    CDSENDERECOBairro.AsString := tq.FieldByName('END_BAIRRO').AsString;
    CDSENDERECOCEP.AsString := tq.FieldByName('END_CEP').AsString;
    CDSENDERECODDD.AsString := tq.FieldByName('CID_DDD').AsString;
    CDSENDERECO.Post;
    tq.Next;
  end;
  CDSENDERECO.First;
  tq.Close;
  tq.Free;

end;

procedure TfrmAgenda.edtLocChange(Sender: TObject);
begin
  inherited;
  CDSEntidade.Locate('Ent_Nome', edtLoc.Text, [loPartialKey]);
end;

procedure TfrmAgenda.dbgrdEntidadeKeyPress(Sender: TObject; var Key: Char);
begin
  inherited;
  TrazEndereco;
  TrazContato;
end;

procedure TfrmAgenda.TrazContato;
var
  tq: TQuery;
begin
  inherited;
  CDSCONTATO.Close;
  CDSCONTATO.CreateDataSet;
  CDSCONTATO.Open;
  tq := TQuery.Create(self);
  tq.DatabaseName := dmInt.Db.DatabaseName;
  tq.SQL.clear;
  tq.params.Clear;
  tq.SQL.add('select distinct c.* ' +
    'from Contato C ' +
    'where ent_codigo =:ent');
  tq.ParamByName('ent').AsString := CDSEntidadeENT_CODIGO.AsString;
  tq.Open;
  while not tq.Eof do begin
    CDSCONTATO.Append;
    CDSCONTATOCONT_NOME.AsString := tq.FieldByName('CONT_NOME').AsString;
    CDSCONTATOCONT_DEPARTAMENTO.AsString := tq.FieldByName('CONT_DEPARTAMENTO').AsString;
    CDSCONTATOCONT_RAMAL.AsString := tq.FieldByName('CONT_RAMAL').AsString;
    CDSCONTATOCONT_EMAIL.AsString := tq.FieldByName('CONT_EMAIL').AsString;
    CDSCONTATOCONT_CARGO.AsString := tq.FieldByName('CONT_CARGO').AsString;
    CDSCONTATOCONT_NASC.AsString := tq.FieldByName('CONT_NASC').AsString;
    CDSCONTATOCONT_FONE.AsString := tq.FieldByName('CONT_FONE').AsString;
    CDSCONTATO.Post;
    tq.Next;
  end;
  CDSCONTATO.First;
  tq.Close;
  tq.Free;
end;

end.
